#include "7zip.hpp"

#define k7zStartHeaderSize 0x20
#define k7zSignatureSize 6
extern uint8_t k7zSignature[k7zSignatureSize];
#define k7zMajorVersion 0

enum EIdEnum
{
	k7zIdEnd,
	k7zIdHeader,
	k7zIdArchiveProperties,
	k7zIdAdditionalStreamsInfo,
	k7zIdMainStreamsInfo,
	k7zIdFilesInfo,
	k7zIdPackInfo,
	k7zIdUnpackInfo,
	k7zIdSubStreamsInfo,
	k7zIdSize,
	k7zIdCRC,
	k7zIdFolder,
	k7zIdCodersUnpackSize,
	k7zIdNumUnpackStream,
	k7zIdEmptyStream,
	k7zIdEmptyFile,
	k7zIdAnti,
	k7zIdName,
	k7zIdCTime,
	k7zIdATime,
	k7zIdMTime,
	k7zIdWinAttributes,
	k7zIdComment,
	k7zIdEncodedHeader,
	k7zIdStartPos,
	k7zIdDummy
};

bool SevenZip::load()
{
	try
	{
		uint8_t header[12];

		r.get(header, 12);

		// TODO: Test signature/version

		uint64_t nextHeaderOffset = read_uint64_le(r);
		uint64_t nextHeaderSize = read_uint64_le(r);
		uint32_t nextHeaderCRC = read_uint32_le(r);

		// TODO: CRC calc

		// TODO: Sanity checks

		r.seekg(k7zStartHeaderSize + nextHeaderOffset);
	}
	catch(gvl::stream_error& e)
	{
		return false;
	}

	return true;
}
